package tur.br.moradadosol.dao.implementacao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;

import tur.br.moradadosol.dao.TipoDespesaDAO;
import tur.br.moradadosol.model.TipoDespesa;

public class SQLTipoDespesaDAO implements TipoDespesaDAO {
	
	private Connection connection;
	
	public SQLTipoDespesaDAO(Connection conn) {
		connection = conn;
	}
	
	public void delete(int codigo) throws Exception {
		
		String sql = "delete from TIPO_DESPESA where CODIGO = ?";
		
		PreparedStatement pstm = connection.prepareStatement(sql);
		pstm.setInt(1, codigo);
		
		pstm.executeUpdate();
	}

	public TipoDespesa getTipoDespesaByCodigo(int codigo) throws Exception {
		
		String sql = "select * from TIPO_DESPESA where CODIGO = ?";
		
		PreparedStatement pstm = connection.prepareStatement(sql);
		
		pstm.setInt(1, codigo);
		
		ResultSet rs = pstm.executeQuery();
		
		return getTipoDespesa(rs);
	}

	public Collection getTiposDespesas() throws Exception {
		
		String sql = "select * from TIPO_DESPESA order by DESCRICAO";
		
		PreparedStatement pstm = connection.prepareStatement(sql);
		
		ResultSet rs = pstm.executeQuery();
		
		ArrayList array = new ArrayList();
		
		while(rs.next()) {
			
			array.add(getTipoDespesa(rs));
		}
		
		return array;
	}

	public void insert(TipoDespesa tipoDespesa) throws Exception {
		
		String sql = "select max(CODIGO) + 1 as CODIGO from TIPO_DESPESA";
		
		PreparedStatement pstm = connection.prepareStatement(sql);
		
		ResultSet rs = pstm.executeQuery();
		
		if(rs.next()) {
			tipoDespesa.setCodigo(rs.getInt("CODIGO"));
		}
		
		sql = "insert into TIPO_DESPESA (CODIGO, DESCRICAO) values (?,?)";
		
		pstm = connection.prepareStatement(sql);
		
		pstm.setInt(1, tipoDespesa.getCodigo());
		pstm.setString(2, tipoDespesa.getDescricao());
		
		pstm.executeUpdate();
	}

	public void update(TipoDespesa tipoDespesa) throws Exception {
		
		String sql = "update TIPO_DESPESA set DESCRICAO = ? where CODIGO = ?";
		
		PreparedStatement pstm = connection.prepareStatement(sql);
		
		pstm.setString(1, tipoDespesa.getDescricao());
		pstm.setInt(2, tipoDespesa.getCodigo());
		
		pstm.executeUpdate();
	}
	
	private TipoDespesa getTipoDespesa(ResultSet rs) throws Exception {
		TipoDespesa tipoDespesa = new TipoDespesa();
		
		tipoDespesa.setCodigo(rs.getInt("CODIGO"));
		tipoDespesa.setDescricao(rs.getString("DESCRICAO"));
		
		return tipoDespesa;
	}
}
